package com.dream.libmp3lame;

public class MP3Lame {

    static {
        System.loadLibrary("mp3lame");
    }

    /**
     * 创建一个编码器，后续调用encode和flush方法
     * @param inSample 输入PCM的采样率
     * @param outSample 输出MP3的采样率
     * @param inChannels 输入PCM的声道数
     * @param outChannels 输出MP3的声道数
     * @param bitRate 比特率
     * @param quality 质量 1 ~ 9
     * @param isVbr 是否使用VBR（动态码率）
     *
     */
    public native void initEnc(int inSample,int outSample,
                            int inChannels,int outChannels,
                            int bitRate,int quality,boolean isVbr);

    /**
     * 创建一个录音器，后续调用writeRec方法和flushRec方法
     * @param path 输出MP3的路径
     * @param inSample 输入PCM的采样率
     * @param outSample 输出MP3的采样率
     * @param inChannels 输入PCM的声道数
     * @param outChannels 输出MP3的声道数
     * @param bitRate 比特率
     * @param quality 质量 1 ~ 9
     * @param isVbr 是否使用VBR（动态码率）
     */
    public native void initRec(String path,int inSample,
                                    int outSample,
                                   int inChannels,int outChannels,
                                   int bitRate,int quality,
                                    boolean isVbr);

    /**
     * 编码PCM数据为MP3数据
     * @param pcmData
     * @param pcmLen
     * @param mp3Data
     * @return MP3数据长度,如果为负数，说明编码失败
     */
    public native int encode(short[] pcmData,
                             int pcmLen,byte[] mp3Data);

    /**
     * 编码PCM数据为MP3数据，并写入文件
     * @param pcmData
     * @param pcmLen
     */
    public native void writeRec(short[] pcmData, int pcmLen);

//    public native void mp3TagsFid();

    /**
     * 编码结束后，获取编码器中的缓存，同样需要写入文件，建议缓冲区大小至少7200字节
     * @param mp3Data
     * @return
     */
    public native int flush(byte[] mp3Data);

    /**
     * 编码结束后，将编码器中的缓存写入文件
     * @return
     */
    public native void flushRec();

    /**
     * 最后释放资源
     */
    public native void release();
}